d3.hierarchy
可協助我們遍歷各種樹狀結構,讓我們不用自己去遍歷複雜的結構,可以說是結構化資料整理的好幫手!
範例結構化資料:
{
"name": "Eve",
"children": [
{
"name": "Cain"
},
{
"name": "Seth",
"children": [
{
"name": "Enos"
},
{
"name": "Noam"
}
]
},
{
"name": "Abel"
},
{
"name": "Awan",
"children": [
{
"name": "Enoch"
}
]
},
{
"name": "Azura"
}
]
}
可以看的出來children
就是子資料結構。
const myHierarchy = d3.hierarchy(datas);
console.log(myHierarchy);
透過 d3.hierarchy
我們可以知道,目前資料的階層關係,轉成hierarchy
,也可以直接使用hierarchy
的各種API
遍歷此樹狀結構。當然也可以自訂子資料的key
const myHierarchy = d3.hierarchy(datas, data => data.children);
console.log(myHierarchy);
用以上方法即可遍歷自己期待的key。
範例:
...省略
family = d3.hierarchy(datas, data => data.sub)
family.eachAfter((node) => console.log(node));
其實這就是tree
結構中的後序遍壢。
範例:
...省略
family = d3.hierarchy(datas, data => data.sub)
family.eachBefore((node) => console.log(node));
其實這就是tree
結構中的前序遍壢。
範例:
...省略
family = d3.hierarchy(datas, data => data.sub)
family.each((node) => console.log(node));
其實這就是BFS
遍壢。
範例:
...省略
family = d3.hierarchy(datas, data => data.sub)
const newFamily = family.copy();
這是deep copy
非常方便好用,防止其他副作用產生,一接到樹狀結構,馬上就是copy
,隔離原始資料跟操作資料。
這API
一開始覺得就看過就好,直到遇到d3-flow-tree-layout,才特別研究,因為有一個需求需要實現某項結構性的功能,才發現這d3.hierarchy
的好。
d3-flow-tree-layout
d3-hierarchy